package org.xteam.sled.model;

import java.util.List;

import org.xteam.sled.semantic.Field;
import org.xteam.sled.semantic.exp.Exp;
import org.xteam.sled.semantic.exp.IExpRewriter;


public abstract class ConstraintOrLabel<LABEL> {

	public boolean isLabel() {
		return false;
	}
	
	public boolean hasInputOrLabels() {
		return true;
	}

	public int width() {
		return 0;
	}
	
	public boolean isContradictory() {
		return false;
	}

	public abstract ConstraintOrLabel<LABEL> merge(ConstraintOrLabel<LABEL> other);

	public abstract List<RangeConstraint<Field>> getConstraints();

	public abstract ConstraintOrLabel<LABEL> substitutePC(int k, Exp addBitsToPC);

	public abstract ConstraintOrLabel<LABEL> subs(IExpRewriter subs);

	public abstract ConstraintOrLabel<LABEL> actualize(boolean actualsOk);

}
